package com.fastdfs.util;

import org.junit.Test;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//日期转换
public class DateUtils implements Serializable {

    //日期转换成字符串
    public static String dateTurnString(Date date, String patt) {
        SimpleDateFormat sdf = new SimpleDateFormat(patt);
        String format = sdf.format(date);
        return format;
    }

    //字符串转换成日期
    public static Date stringTurnDate(String str, String patt) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(patt);
        Date parse = sdf.parse(str);
        return parse;
    }

    //当前日期   字符串形式
    public static String dateStrng(){
        Date dNow = new Date( );
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");


         return ft.format(dNow);
    }
    //当前日期  返回Date对象
    public static Date date(){
        return  new Date();
    }


    //比较 两个时间戳(毫秒) 大小   左边 比较右边
    //  1 大于  0小于
    public static int dateEq(Long data1,Long data2){

        boolean  pd= data1>data2; //将本地时间 和 其他的时间进行比较
        if (pd){
            System.out.println("本地时间 大 ");
            return 1;
        }else{
            System.out.println("本地时间 小 ");
            return 0;
        }
    }
    //毫秒转Date
    public Date millisecondTurnDate(Long milliSecond){
        Date date = new Date();
        date.setTime(milliSecond);
        return  date;
    }


    //当前时间和 指定时间  比较   传入字符串格式的时间 比如  2020-6-6 18:40:5
    //1 大于  0小于
    public static int dateStrEq(String strdate){
        SimpleDateFormat  df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        df.setLenient(false);//false严格处理 是否符合 现实中的日期格式  比如 这个月没有31号 但是不开启的情况下 不会报错的
        Date time= null;// 如果格式不对 就会报错
        try {
            time = df.parse(strdate);
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }
        Date data=new Date(); //获取本地时间
        boolean  pd=data.after(time); //将本地时间 和 其他的时间进行比较
        if (pd){
            System.out.println("本地时间 大 ");
            return 1;
        }else{
            System.out.println("本地时间 小 ");
            return 0;
        }
    }

    // 两个指定时间 相比较   左边和右边对比   左边小 0  左边大 1   时间格式 2020-6-5 00:00:00
    public static int dateStrEq(String strDate1,String strDate2){
        SimpleDateFormat  df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        df.setLenient(false);//false严格处理 是否符合 现实中的日期格式  比如 这个月没有31号 但是不开启的情况下 不会报错的
        Date time1= null;// 如果格式不对 就会报错
        Date time2= null;// 如果格式不对 就会报错
        try {
            time1 = df.parse(strDate1);
            time2 = df.parse(strDate2);
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }

        boolean  pd=time1.after(time2); //将本地时间 和 其他的时间进行比较
        if (pd){
            System.out.println("本地时间 大 ");
            return 1;
        }else{
            System.out.println("本地时间 小 ");
            return 0;
        }

    }

    //   endDate 减  nowDate
    public static String getDatePoor(Date endDate, Date nowDate) {
        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - nowDate.getTime();
        // 计算差多少天
        long day = diff / nd;
        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        long min = diff % nd % nh / nm;
        // 计算差多少秒//输出结果
        // long sec = diff % nd % nh % nm / ns;
        return day + "天" + hour + "小时" + min + "分钟";
    }
    //   endDate 减  nowDate
    public static String getDateStrPoor(String endDate, String nowDate) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = null;
        Date date2 = null;
        try {
            date1 = format.parse(endDate);
            date2 = format.parse(nowDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = date1.getTime() - date2.getTime();
        // 计算差多少天
        long day = diff / nd;
        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        long min = diff % nd % nh / nm;
        // 计算差多少秒//输出结果
        // long sec = diff % nd % nh % nm / ns;
        return day + "天" + hour + "小时" + min + "分钟";
    }

    @Test
    public void show(){
        System.out.println(  dateStrng());
    }
    @Test
    public void show1(){
        System.out.println(  date());
    }
    @Test
    public void show2(){
        System.out.println(  dateStrEq("2020-6-6 18:40:5"));
    }
    @Test
    public void show3(){
        System.out.println(  dateStrEq("2020-6-5 00:00:00","2020-6-6 18:40:5"));
    }

    @Test
    public void show4(){
        System.out.println(  dateEq(new Date().getTime(),1606753636253L )) ;
    }

    @Test
    public void show5(){
        Date date = millisecondTurnDate(1606753636253L);
        System.out.println(  date  ) ;
    }


    @Test
    public void show6(){
        String dateStr1 = "2019-01-19 6:6:5";
        String dateStr2 = "2019-01-19 6:5:5";
        System.out.println( getDateStrPoor(dateStr1,dateStr2));
    }
}
